
#ifndef _VARIADICTEMPLATE_HPP_
#define _VARIADICTEMPLATE_HPP_

#include <iostream>

using namespace std;

template <typename... T>
void func(T... args)
{
    //可变参数模板函数
    //sizeof...（sizeof后面有3个小点）计算变参个数
    cout << "num = " << sizeof...(args) << endl;
}

/* 递归方式展开参数包 */
//递归终止函数
void Recursion()
{
    cout << "empty\n";
}

// 展开函数
template <typename T, typename... Args>
void Recursion(const T &first, const Args &... last)
{
    cout << "parameter " << first << endl;
    Recursion(last...);
}

/* 递归方式展开参数包 */

/* 非递归方式展开参数包 */
template <typename T>
void noRecusion(const T &arg)
{
    cout << arg << endl;
}

template <typename... Args>
void noRecusion(const Args &... args)
{
    int a[] = {(noRecusion(args), 0)...};
}

/* 非递归方式展开参数包 */

#endif